using System;
using System.Collections.Generic;
using System.Collections;

namespace RpgServiceLib.Quest
{


	public interface IQuest
	{
		int Id {get;}
		string NameOfQuest { get; }
		string DescriptionOfQuest { get;   }
		IList<IQuest> ListOfEmbeddedQuests { get; }
		QuestListType QuestListType { get;  }
		int CurrentQuestInList { get;  }
		QuestStatus StatusOfQuest { get;}
		QuestType QuestType { get; }		
		IQuest LinkedFromQuest { get; set; }
			
		
		//delegate void ChangedQuestHandler (QuestChangeEvent questevent);
		event ChangedQuestHandler changed;
		
		IQuest SetQuestChangeAllowedStrategy(IQuestChangeAllowedStrategy questChangeAllowedStrategy);
		IQuest SetQuestStatusHandlerStrategy (IQuestStatusHandlerStrategy questStatusHandlerStrategy);
		
		IQuest AddQuest(IQuest quest);
		
		QuestChangeEvent SetNameOfQuest(string name);
		QuestChangeEvent SetDescriptionOfQuest( string description); 
		QuestChangeEvent SetQuestListType(QuestListType questListType);		
		QuestChangeEvent SetQuestStatus (QuestStatus questStatus);
		QuestChangeEvent SetQuestType (QuestType questType);
		
		IQuest GetQuestById(int id);

		IEnumerable<IQuest> GetQuestByName (string name);
	}
}

